package cl.mt.proxy;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import cl.mt.data.DataParametros;
import cl.mt.dto.ParametroDTO;


public class ProxyParametro implements Serializable {

	private transient Logger log = LogManager.getLogger(ProxyParametro.class.getName());

	
    private static ProxyParametro instance = null;
    private static Collection lista = null;

    public ProxyParametro() {
    }

    public static ProxyParametro getInstance() {
        if (instance == null) {
            instance = new ProxyParametro();
        }
        return instance;
    }

    public ParametroDTO getByCodigo(String codigo, String key) {
        if (codigo == null || key == null) {
            return null;
        }
        if (lista == null) {
            findAll();
        }
        if (lista != null) {
            for (Iterator it = lista.iterator(); it.hasNext();) {
                ParametroDTO dto = (ParametroDTO) it.next();
                if (codigo.equals(dto.getCodigo()) && key.equals(dto.getKey())) {
                    return dto;
                }
            }
        }
        return null;
    }
    public ArrayList getListaByCodigo(String codigo) {
        if (codigo == null) {
            return null;
        }
        if (lista == null) {
            findAll();
        }
        ArrayList listaAux = new ArrayList();
        if (lista != null) {
            for (Iterator it = lista.iterator(); it.hasNext();) {
                ParametroDTO dto = (ParametroDTO) it.next();
                if (codigo.equals(dto.getCodigo())) {
                    listaAux.add( dto );
                }
            }
        }
        return listaAux;
    }

    public String getValor(String codigo, String key) {
        ParametroDTO dto = getByCodigo(codigo, key);
       log.info("[" + codigo + "," + key + "," + (dto == null ? null : dto.getValor()) + "]" );              
        return (dto == null ? null : dto.getValor());
    }

    private void findAll() {
        DataParametros dao = new DataParametros();
        lista = dao.findAllMC();
    }

    public void refresh() {
        lista = null;
    }

    public Collection getLista() {
        if (lista == null) {
            findAll();
        }
        return lista;
    }
}